const mongoose = require('mongoose');

const MessageSegmentSchema = new mongoose.Schema({
    type: {
        type: String,
    },
    data: {}
}, { _id: false, strict: false });

const SenderSchema = new mongoose.Schema({
    user_id: {
        type: Number,
    },
    nickname: {
        type: String,
    },
    sex: {
        type: String,
        enum: ['male', 'female', 'unknown'],
        default: 'unknown'
    },
    group_id: {
        type: Number,
    },
    card: {
        type: String,
        default: ''
    },
    role: {
        type: String,
        enum: ['owner', 'admin', 'member'],
        default: 'member'
    },
}, { _id: false, strict: false });

const MessageSchema = new mongoose.Schema({
    // 时间发生的时间戳秒
    time: {
        type: Number,
        index: true,
    },
    // 事件类型
    post_type: {
        type: String,
    },
    // 收到事件的机器人QQ号
    self_id: {
        type: Number,
        index: true,
    },
    // 消息类型
    message_type: {
        type: String,
    },
    // 子类型
    sub_type: {
        type: String,
    },
    // 消息 ID
    message_id: {
        type: Number,
        index: true,
    },
    // 发送者 QQ 号
    user_id: {
        type: Number,
        index: true,
    },
    // 群号
    group_id: {
        type: Number,
        index: true,
    },
    // 消息段数组
    message: {
        type: [MessageSegmentSchema],
    },
    // 原始消息内容
    raw_message: {
        type: String,
    },
    // 字体
    font: {
        type: Number,
    },
    // 临时会话目标 QQ 号（可选）
    target_id: {
        type: Number,
        required: false,
    },
    // 临时会话来源（可选）
    temp_source: {
        type: Number,
        required: false,
    },
    // 发送者信息
    sender: {
        type: SenderSchema,
    },
    // 通知类型（见下表）
    notice_type: {
        type: String,
    },
    // 请求类型
    request_type: {
        type: String,
    },
    // 请求 flag
    flag: {
        type: String,
    },
    // 验证信息
    comment: {
        type: String,
    }
}, {
    timestamps: {
        createdAt: 'create_at',
        updatedAt: 'update_at'
    },
    strict: false,
});

MessageSchema.index({ group_id: 1, time: -1 })
MessageSchema.index({ user_id: 1, time: -1 })
MessageSchema.index({ self_id: 1, time: -1 })

module.exports = mongoose.model('Message', MessageSchema);
